//
// Created by Administrator on 2021/5/3.
//

/*
给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围[−2^31, 2^31− 1] ，就返回 0。

假设环境不允许存储 64 位整数（有符号或无符号）。


示例 1：

输入：x = 123
输出：321
示例 2：

输入：x = -123
输出：-321
示例 3：

输入：x = 120
输出：21
示例 4：

输入：x = 0
输出：0


提示：

-231 <= x <= 231 - 1

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/reverse-integer
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。*/
#include <iostream>
#include <climits>

class Solution {
public:
    int reverse(int x) {
        int sign = 1; // 符号
//        if (x < 0) {
//            sign = -1;
//            x = -x;
//        }
        int temp = 0;
        while (x) {
            if (temp > INT_MAX / 10 || temp < INT_MIN / 10) return 0;
            temp = temp * 10 + x % 10;
            x /= 10;
        }
        return temp;
    }
};
class Solution2 {  // 优秀解答
public:
    int reverse(int x) {
        int rev = 0;
        while (x != 0) {
            int pop = x % 10;
            x /= 10;
            if (rev > INT_MAX/10 || (rev == INT_MAX / 10 && pop > 7)) return 0;
            if (rev < INT_MIN/10 || (rev == INT_MIN / 10 && pop < -8)) return 0;
            rev = rev * 10 + pop;
        }
        return rev;


    }
};
int main() {
    Solution2 sol;
    std::cout << sol.reverse(123) << std::endl;
    std::cout << sol.reverse(-123) << std::endl;
    return 0;
}
